package xx.services.management.rest;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.sql.RowSet;
import javax.ws.rs.DELETE;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Context;

import xx.entity.manage.Page;
import xx.services.Passport;
import xx.services.management.inter.IPageInterface;
import xx.services.util.Constants;

/**
 * 后台管理页面服务接口
 * 
 * @Path (Constants.RESTFUL_ROOT_PATH + "/management/page")
 * @author dengjinye,2010-12-20 $LastChangedDate$ $Author$
 */
@Path(Constants.RESTFUL_ROOT_PATH + "/management/page")
public class PageRest extends Passport implements IPageInterface
{

    public PageRest(@Context
    HttpServletRequest request)
    {
        super(request);
        // TODO Auto-generated constructor stub
    }

    /**
     * 增加一个新页面
     * 
     * @POST
     * @author chenxiang 2010-12-19
     * @param keyword-@FormParam("keyword")
     *            页面唯一关键字
     * @param title-@FormParam("title")
     *            页面标题
     * @param content-@FormParam("content")
     *            页面内容
     * @param url-@FormParam("url")
     *            页面对应的URL地址，当content地址存在时，URL无效
     * @param description-@FormParam("description")
     *            页面描述
     * @return 新增的页面实体
     */
    @POST
    public String add(@FormParam("keyword")
    String keyword, @FormParam("title")
    String title, @FormParam("content")
    String content, @FormParam("url")
    String url, @FormParam("description")
    String description)
    {
        try
        {
            Page page = new Page(qr, owner);
            page.setKeyword(keyword).setTitle(title).setContent(content).setUrl(url)
                    .setDescription(description);
            page.insert();
            return ok(page);
        }
        catch (Exception e)
        {
            return error(e);
        }
    }

    /**
     * 删除后台管理页面
     * 
     * @DELETE
     * @Path ("/{page_id}")
     * @author chenxiang 2010-12-19
     * @param pageId-@PathParam("page_id")
     *            后台页面ID，多个ID用“_”隔开
     * @return
     */
    @DELETE
    @Path("/{page_id}")
    public String delete(@PathParam("page_id")
    long pageId)
    {
        try
        {
            Page page = new Page(qr, owner);
            page.setPageId(pageId).delete();
            return ok(true);
        }
        catch (Exception e)
        {
            return error(e);
        }
    }

    /**
     * 根据页面ID来获取单个页面详细信息
     * 
     * @GET
     * @Path ("/{page_id: \\d+}")
     * @author chenxiang 2010-12-19
     * @param pageId-@PathParam("page_id")
     *            页面ID
     * @return 单个页面实体
     */
    @GET
    @Path("/{page_id: \\d+}")
    public String getId(@PathParam("page_id")
    long pageId)
    {
        try
        {
            if (pageId == 0)
                return ok("", HTML);

            Page page = new Page(qr, owner);
            page.setPageId(pageId).load();

            // return Xson.toJson(page);
            return ok(page);
        }
        catch (Exception e)
        {
            return error(e);
        }
    }

    /**
     * 根据页面关键字来获取单个页面详细信息
     * 
     * @GET
     * @Path ("/{keyword: [a-zA-Z0-9].*}")
     * @author chenxiang 2010-12-19
     * @param keyword-@PathParam("keyword")
     *            页面关键字
     * @return 单个页面实体
     */
    @GET
    @Path("/{keyword: [a-zA-Z0-9].*}")
    public String getKey(@PathParam("keyword")
    String keyword)
    {
        try
        {
            if (keyword == null || "".equals(keyword.trim()))
                return ok("");

            Page page = new Page(qr, owner);
            page.setKeyword(keyword).load();

            // return Xson.toJson(page);
            return ok(page.getContent(), HTML);
        }
        catch (Exception e)
        {
            return error(e);
        }
    }

    /**
     * 获取所有后台管理页面列表
     * 
     * @GET
     * @author chenxiang 2010-12-19
     * @return 后台管理页面列表
     */
    @GET
    public String gets()
    {
        try
        {
            Page page = new Page(qr, owner);
            RowSet rs = page.getList(pageSize, pageNo, condition, orderField, fields);

            Map<String, Object> map = new HashMap<String, Object>();
            if (isTotal)
            {
                map.put(Constants.TOTAL, page.getCount(condition));
            }

            return ok(rs, map);
        }
        catch (Exception e)
        {
            return error(e);
        }
    }

    /**
     * 修改后台管理页面
     * 
     * @PUT
     * @Path ("/{page_id}")
     * @author chenxiang 2010-12-19
     * @param pageId-@FormParam("page_id")
     *            页面ID
     * @param keyword-@FormParam("keyword")
     *            页面唯一关键字
     * @param title-@FormParam("title")
     *            页面标题
     * @param content-@FormParam("content")
     *            页面内容
     * @param url-@FormParam("url")
     *            页面对应的URL地址，当content地址存在时，URL无效
     * @param description-@FormParam("description")
     *            页面描述
     * @return 新页面实体
     */
    @PUT
    @Path("/{page_id}")
    public String modify(@FormParam("page_id")
    long pageId, @FormParam("keyword")
    String keyword, @FormParam("title")
    String title, @FormParam("content")
    String content, @FormParam("url")
    String url, @FormParam("description")
    String description)
    {
        try
        {
            Page page = new Page(qr, owner);
            page.setPageId(pageId).setKeyword(keyword).setTitle(title).setContent(content).setUrl(
                    url).setDescription(description);
            page.update();
            return ok(pageId);

        }
        catch (Exception e)
        {
            return error(e);
        }
    }
}
